import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

# Mock using ESM

Você pode usar seu framework ou ferramenta de **Mock** preferido e o **Poku** juntos 🐷➕

> Por não restringir você a um conjunto de plugins ou ferramentas, o **Poku** promove um ecossistema aberto onde os desenvolvedores são livres para integrar as ferramentas que melhor atendem às suas necessidades.

Para esse exemplo, vamos usar o [**quibble**](https://github.com/testdouble/quibble), e em seguida, testar seus resultados com o **Poku**:

<Tabs>
  <TabItem default value='./test/withdraw.test.js'>

    ```js
    import { assert } from 'poku';
    import quibble from 'quibble';

    await quibble.esm('../lib/funds.js', {
      // Original: 100
      getFunds: () => 200,
    });

    const { withdraw } = await import('../lib/withdraw.test.js');

    assert.strictEqual(withdraw(200), true, 'Simulando meus fundos para 200');

    assert.strictEqual(withdraw(300), false, "Eu não posso obter mais do que eu tenho");

    await quibble.reset();
    ```

  </TabItem>
  <TabItem  value='./lib/funds.js'>

    ```js
    export const getFunds = () => 100;
    ```

  </TabItem>
  <TabItem  value='./lib/withdraw.js'>

    ```js
    import { getFunds } from './funds.js';

    export const withdraw = (value) => {
      const wallet = getFunds();

      return value <= wallet;
    };
    ```

  </TabItem>
</Tabs>

Then:

```bash
npx poku
```
